package edu.nepu.flink.api.towpc;

/**
 * @Date 2024/3/4 9:53
 * @Created by chenshuaijun
 */
public class StateConsistency {

    public static void main(String[] args) {
        /**
         * TODO 本类主要介绍的是flink的状态一致性
         * 1、状态的一致性指的是结果的正确，保证数据不丢不重复
         * 2、状态一致性的级别
         * （1）最多一次
         * （2）最少一次
         * （3）精准一次
         * 3、端到端的数据一致性
         *   在flink中要保证端到端的数据一致性，需要下面的操作
         *   Source：数据可重发
         *   flink内部： checkpoint + 精确一次性
         *   sink: 事务 / 幂等性
         *      基于事务的方式：
         *                 （1）数据到来的时候，flink处理完成之后正常写入，但是数据标记的是未提交。
         *                 （2）当checkpoint完成之后，将数据更改为已提交，下游便可以读取到
         *                 如果checkpoint完成之后，数据状态更改失败，也不会导致数据的丢失，因为checkpoint的过程中，会将事务的状态也进行保存
         * 4、如果想要使用两阶段提交，下游必须支持事务，并且是分布式的事务，sink算子需要实现TwoPhaseCommittingSink接口，一般flink提供的sink都实现了两阶段提交
         *
         *
         * 4、
         */
    }
}
